package com.pxxy.lawconsult.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.pxxy.lawconsult.constant.DBConstant;

public class DBUtils {
	private static Connection con=null;
	private static PreparedStatement sql=null;
	private static ResultSet rs=null;
	
	//增
	/**
	 * @return
	 *插入一条数据
	 * @throws SQLException
	 */
	public static int insert(String table,String[] values) throws SQLException {
		//加载驱动
		loadDriver();
		//加载connection和statement
		
		//创建StrinBuilder存放sql语句
		StringBuilder sqlSatement=new StringBuilder("insert into"+table+" values (");
		for(int i=0;i<values.length;i++) {
			if(i==values.length-1) {
				sqlSatement.append("'"+values[i]+"'");
			}else {
				sqlSatement.append("'"+values[i]+"'"+",");
			}
			
		}
		sqlSatement.append(")");
		//初始化数据库连接对象，并且预加载sql语句
		loadSql(sqlSatement.toString());
		
		int a=sql.executeUpdate();
		return a;
	}
	//增
	/**
	 * 插入数据
	 * @param table	要增加数据的表名
	 * @param field	插入数据的字段数组
	 * @param values 要插入的数据，与字段数组一一对应
	 * @return
	 * @throws SQLException
	 */
	public static int insert(String table,String[] field,String[] values) throws SQLException {
		//加载驱动
		loadDriver();
		
		//创建StrinBuilder存放sql语句
		StringBuilder sqlSatement=new StringBuilder("insert into "+table+"(");
		for(int i=0;i<field.length;i++) {
			if(i==field.length-1) {
				sqlSatement.append(field[i]);
			}else {
				sqlSatement.append(field[i]+",");
			}
		}
		sqlSatement.append(") values (");
		
		for(int i=0;i<values.length;i++) {
			if(i==values.length-1) {
				sqlSatement.append("'"+values[i]+"'");
			}else {
				sqlSatement.append("'"+values[i]+"'"+",");
			}
		}
		sqlSatement.append(")");
		//加载connection和statement
		loadSql(sqlSatement.toString());
		int a=sql.executeUpdate();
		return a;
	}
	//删
	/**
	 * 删除数据
	 * @param table 要删除数据的表名
	 * @param conditionField 条件中的字段名
	 * @param conditionValues 条件中的值
	 * @return
	 * @throws SQLException
	 */
	public static int delete(String table,String conditionField,String conditionValues) throws SQLException {
		loadDriver();
		
		
		StringBuilder sqlSatement=new StringBuilder("delete from "+table+" where "+conditionField+"="+"'"+conditionValues+"'");
		loadSql(sqlSatement.toString());
		int a=sql.executeUpdate();
		
		return a;
	}
	
	//改
	/**
	 * 更改数据
	 * @param table 要更改数据的表名
	 * @param changeValue 更改之后的内容
	 * @param changeField 更改的字段
	 * @param conditionField  更改条件的字段
	 * @param conditionValues	更改条件的内容
	 * @return
	 * @throws SQLException
	 */
	public static int update(String table,String changeField,String changeValue,String conditionField,String conditionValues) throws SQLException {
		loadDriver();
		
		
		StringBuilder sqlSatement=new StringBuilder("update "+table+" set "+changeField+"="+"'"+changeValue+"'"+" where "+conditionField+"="+"'"+conditionValues+"'");
		loadSql(sqlSatement.toString());
		int a=sql.executeUpdate();
		return a;
	}
	
	//查
	/**
	 * 查询数据库中的数据
	 * @param table 要查询的表名
	 * @param conditionField 条件中的字段名，可以为null
	 * @param conditionValues 条件中的值，可以为null
	 * @return
	 * @throws SQLException
	 */
	public static ResultSet query(String table,String conditionField,String conditionValues) throws SQLException {
		StringBuilder sqlSatement;
		loadDriver();
		
		if(conditionField==null||conditionValues==null) {
			sqlSatement=new StringBuilder("select * from "+table);
		}else {
			sqlSatement=new StringBuilder("select * from "+table+" where "+conditionField+"="+"'"+conditionValues+"'");
		}
		
		loadSql(sqlSatement.toString());
		rs=sql.executeQuery();
		return rs;
	}
	
	/**
	 * 加载数据库驱动
	 */
	private static void loadDriver() {
		try {
			Class.forName(DBConstant.DB_DRIVER);
		} catch (ClassNotFoundException e) {
			System.out.println("数据库驱动加载失败!");
			e.printStackTrace();
		}
	}
	/**
	 * 加载connection和statement
	 * @throws SQLException
	 */
	private static void loadSql(String sqlStatement) throws SQLException {
		con=DriverManager.getConnection(DBConstant.DB_URL,DBConstant.DB_USERNAME, DBConstant.DB_USERPASSWORD);
		sql=con.prepareStatement(sqlStatement);
	}
	
	/**
	 * 关闭数据库连接
	 */
	public static void close() {
		
			try {
				if(con!=null) {
					con.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
			try {
				if(sql!=null) {
					sql.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
			try {
				if(rs!=null) {
					rs.close();
				}
			}catch(SQLException e){
				e.printStackTrace();
			}
	}
}
